From 31d5e80ce52ca87be8a3f4ae0658b6aa6c5a3cd9 Mon Sep 17 00:00:00 2001 From: oliskoli Date: Fri, 13 Apr 2007 08:01:59 +0000 Subject: [PATCH] Typo fix. Add functions GPS_Math_Known_Datum_To_UTM_EN(), GPS_Math_UTM_EN_To_Known_Datum() and GPS_Math_Get_Datum_Name(). --- jeeps/gpsmath.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++-- jeeps/gpsmath.h | 6 ++++ 2 files changed, 96 insertions(+), 2 deletions(-) diff --git a/jeeps/gpsmath.c b/jeeps/gpsmath.c index 4ac951730..b87de048a 100644 --- a/jeeps/gpsmath.c +++ b/jeeps/gpsmath.c @@ -1432,7 +1432,7 @@ int32 GPS_Math_UKOSMap_To_WGS84_M(char *map, double mE, double mN, GPS_Math_NGENToAiry1830LatLon(E,N,&alat,&alon); - GPS_Math_Known_Datum_To_WGS84_M(alat,alon,0,lat,lon,&ht,78); + GPS_Math_Known_Datum_To_WGS84_M(alat,alon,0,lat,lon,&ht,86); return 1; } @@ -1501,7 +1501,7 @@ int32 GPS_Math_UKOSMap_To_WGS84_C(char *map, double mE, double mN, GPS_Math_NGENToAiry1830LatLon(E,N,&alat,&alon); - GPS_Math_Known_Datum_To_WGS84_C(alat,alon,0,lat,lon,&ht,78); + GPS_Math_Known_Datum_To_WGS84_C(alat,alon,0,lat,lon,&ht,86); return 1; } @@ -1799,6 +1799,88 @@ int32 GPS_Math_UTM_EN_To_WGS84(double *lat, double *lon, double E, return 1; } +/* @func GPS_Math_Known_Datum_To_UTM_EN ********************************* +** +** Transform known datum lat/lon to UTM zone, easting and northing +** +** @param [r] lat [double] WGS84 latitude (deg) +** @param [r] lon [double] WGS84 longitude (deg) +** @param [w] E [double *] easting (metres) +** @param [w] N [double *] northing (metres) +** @param [w] zone [int32 *] zone number +** @param [w] zc [char *] zone character +** @param [r] n [int32] datum number from GPS_Datum structure +** +** @return [int32] success +************************************************************************/ +int32 GPS_Math_Known_Datum_To_UTM_EN(double lat, double lon, double *E, + double *N, int32 *zone, char *zc, const int n) +{ + double phi0; + double lambda0; + double N0; + double E0; + double F0; + double a; + double b; + int32 idx; + + if(!GPS_Math_LatLon_To_UTM_Param(lat,lon,zone,zc,&lambda0,&E0, + &N0,&F0)) + return 0; + + phi0 = (double)0.0; + + idx = GPS_Datum[n].ellipse; + a = (double) GPS_Ellipse[idx].a; + b = a - (a/GPS_Ellipse[idx].invf); + + GPS_Math_LatLon_To_EN(E,N,lat,lon,N0,E0,phi0,lambda0,F0,a,b); + + return 1; +} + +/* @func GPS_Math_UTM_EN_To_Known_Datum ********************************* +** +** Transform UTM zone, easting and northing to known datum lat/lon +** +** @param [w] lat [double *] WGS84 latitude (deg) +** @param [r] lon [double *] WGS84 longitude (deg) +** @param [w] E [double] easting (metres) +** @param [w] N [double] northing (metres) +** @param [w] zone [int32] zone number +** @param [w] zc [char] zone character +** @param [r] n [int32] datum number from GPS_Datum structure +** +** @return [int32] success +************************************************************************/ +int32 GPS_Math_UTM_EN_To_Known_Datum(double *lat, double *lon, double E, + double N, int32 zone, char zc, const int n) +{ + double phi0; + double lambda0; + double N0; + double E0; + double F0; + double a; + double b; + int32 idx; + + if(!GPS_Math_UTM_Param_To_Mc(zone,zc,&lambda0,&E0,&N0,&F0)) + return 0; + + phi0 = (double)0.0; + + idx = GPS_Datum[n].ellipse; + a = (double) GPS_Ellipse[idx].a; + b = a - (a/GPS_Ellipse[idx].invf); + + GPS_Math_EN_To_LatLon(E,N,lat,lon,N0,E0,phi0,lambda0,F0,a,b); + + return 1; +} + + int32 GPS_Lookup_Datum_Index(const char *n) { GPS_PDatum dp; @@ -1818,3 +1900,9 @@ int32 GPS_Lookup_Datum_Index(const char *n) return -1; } + +char * +GPS_Math_Get_Datum_Name(const int datum_index) +{ + return GPS_Datum[datum_index].name; +} diff --git a/jeeps/gpsmath.h b/jeeps/gpsmath.h index e308b8514..b112e3357 100644 --- a/jeeps/gpsmath.h +++ b/jeeps/gpsmath.h @@ -116,7 +116,13 @@ int32 GPS_Math_UTM_EN_To_WGS84(double *lat, double *lon, double E, int32 GPS_Math_UTM_EN_To_NAD83(double *lat, double *lon, double E, double N, int32 zone, char zc); +int32 GPS_Math_Known_Datum_To_UTM_EN(double lat, double lon, double *E, + double *N, int32 *zone, char *zc, const int n); +int32 GPS_Math_UTM_EN_To_Known_Datum(double *lat, double *lon, double E, + double N, int32 zone, char zc, const int n); + int32 GPS_Lookup_Datum_Index(const char *n); +char *GPS_Math_Get_Datum_Name(const int datum_index); #endif -- 2.30.2